[アップデート] CodeDeploy Agent が Red Hat Enterprise Linux 9をサポートしました
Red Hat Enterprise Linux 9のEC2インスタンスにCodeDeployを使ってアプリケーションをデプロイしたい
こんにちは、のんピ(@non____97)です。
皆さんはRed Hat Enterprise Linux 9(以降RHEL 9)のEC2インスタンスにCodeDeployを使ってアプリケーションをデプロイしたいなと思ったことはありますか? 私はあります。
RHEL 9のFull Life Application Streams Release Life CycleはRuby 3.0です。CodeDeploy Agent でのRuby 3.0のサポートは2023/3/3にリリースされた1.5.0からです。
しかし、CodeDeploy Agent 1.5.0や1.6.0がサポートしているOSにはRHEL 9は含まれていませんでした。
CodeDeploy Agentが使えないとなると、デプロイ処理が面倒です。CI/CDとの相性も悪いです。また、Auto Scalongをしている環境であってもゴールデンイメージを都度作り直すのも大変です。
ふと、CodeDeploy AgentのサポートOSを眺めていると、CodeDeploy Agent 1.7.0からRHEL 9がサポート対象に追加されていました。
これで「CodeDeploy Agentが使えないからRHEL 9を使うのを諦める」という悲しい事態にならなくなりました。
ちなみに、私が検証した限りではCodeDeploy Agent 1.6.0でも正常に動作していました。実際1.6.0と1.7.0のソースコードを比較してもRHEL 9特有の事象を回避するための変更はなさそうでした。
試してみた
検証環境
せっかくなので試してみます。
検証環境は以下のとおりです。
検証環境はAWS CDKでデプロイしました。使用したコードは以下リポジトリに保存しています。
CodeDeploy Agentはユーザーデータを使ってインストールしています。デプロイ後にユーザーデータのログを確認してみると、CodeDeploy Agent 1.7.0でインストールされていました。
$ cat /var/log/user-data.log
++ curl -s -X PUT -H 'X-aws-ec2-metadata-token-ttl-seconds: 21600' http://169.254.169.254/latest/api/token
+ token=AQAEAIVyWa8oGACiXv2spRuxwD062qBOoPuVTUZ-1-oBnU_EYaq0fw==
++ curl -s -H 'X-aws-ec2-metadata-token: AQAEAIVyWa8oGACiXv2spRuxwD062qBOoPuVTUZ-1-oBnU_EYaq0fw==' http://169.254.169.254/latest/meta-data/placement/availability-zone
++ sed -e 's/.$//'
+ region_name=us-east-1
+ dnf install -y https://s3.us-east-1.amazonaws.com/amazon-ssm-us-east-1/latest/linux_amd64/amazon-ssm-agent.rpm ruby httpd
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered with an entitlement server. You can use subscription-manager to register.
Red Hat Enterprise Linux 9 for x86_64 - AppStre 18 MB/s | 30 MB 00:01
Red Hat Enterprise Linux 9 for x86_64 - BaseOS 12 MB/s | 19 MB 00:01
Red Hat Enterprise Linux 9 Client Configuration 29 kB/s | 2.2 kB 00:00
amazon-ssm-agent.rpm 74 MB/s | 26 MB 00:00
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
amazon-ssm-agent x86_64 3.3.131.0-1 @commandline 26 M
httpd x86_64 2.4.57-5.el9 rhel-9-appstream-rhui-rpms 52 k
ruby x86_64 3.0.4-160.el9_0 rhel-9-appstream-rhui-rpms 45 k
Installing dependencies:
apr x86_64 1.7.0-12.el9_3 rhel-9-appstream-rhui-rpms 126 k
apr-util x86_64 1.6.1-23.el9 rhel-9-appstream-rhui-rpms 97 k
apr-util-bdb x86_64 1.6.1-23.el9 rhel-9-appstream-rhui-rpms 14 k
httpd-core x86_64 2.4.57-5.el9 rhel-9-appstream-rhui-rpms 1.5 M
httpd-filesystem noarch 2.4.57-5.el9 rhel-9-appstream-rhui-rpms 16 k
httpd-tools x86_64 2.4.57-5.el9 rhel-9-appstream-rhui-rpms 87 k
mailcap noarch 2.1.49-5.el9 rhel-9-baseos-rhui-rpms 35 k
redhat-logos-httpd noarch 90.4-2.el9 rhel-9-appstream-rhui-rpms 18 k
ruby-libs x86_64 3.0.4-160.el9_0 rhel-9-appstream-rhui-rpms 3.3 M
rubygem-json x86_64 2.5.1-160.el9_0 rhel-9-appstream-rhui-rpms 63 k
rubygem-psych x86_64 3.3.2-160.el9_0 rhel-9-appstream-rhui-rpms 64 k
Installing weak dependencies:
apr-util-openssl x86_64 1.6.1-23.el9 rhel-9-appstream-rhui-rpms 17 k
mod_http2 x86_64 1.15.19-5.el9 rhel-9-appstream-rhui-rpms 152 k
mod_lua x86_64 2.4.57-5.el9 rhel-9-appstream-rhui-rpms 62 k
ruby-default-gems noarch 3.0.4-160.el9_0 rhel-9-appstream-rhui-rpms 50 k
rubygem-bigdecimal x86_64 3.0.0-160.el9_0 rhel-9-appstream-rhui-rpms 60 k
rubygem-bundler noarch 2.2.33-160.el9_0 rhel-9-appstream-rhui-rpms 460 k
rubygem-io-console x86_64 0.5.7-160.el9_0 rhel-9-appstream-rhui-rpms 30 k
rubygem-rdoc noarch 6.3.3-160.el9_0 rhel-9-appstream-rhui-rpms 444 k
rubygems noarch 3.2.33-160.el9_0 rhel-9-appstream-rhui-rpms 310 k
Transaction Summary
================================================================================
Install 23 Packages
Total size: 32 M
Total download size: 7.0 M
Installed size: 130 M
Downloading Packages:
(1/22): ruby-3.0.4-160.el9_0.x86_64.rpm 615 kB/s | 45 kB 00:00
(2/22): ruby-default-gems-3.0.4-160.el9_0.noarc 616 kB/s | 50 kB 00:00
.
.
(中略)
.
.
Installed:
amazon-ssm-agent-3.3.131.0-1.x86_64
apr-1.7.0-12.el9_3.x86_64
apr-util-1.6.1-23.el9.x86_64
apr-util-bdb-1.6.1-23.el9.x86_64
apr-util-openssl-1.6.1-23.el9.x86_64
httpd-2.4.57-5.el9.x86_64
httpd-core-2.4.57-5.el9.x86_64
httpd-filesystem-2.4.57-5.el9.noarch
httpd-tools-2.4.57-5.el9.x86_64
mailcap-2.1.49-5.el9.noarch
mod_http2-1.15.19-5.el9.x86_64
mod_lua-2.4.57-5.el9.x86_64
redhat-logos-httpd-90.4-2.el9.noarch
ruby-3.0.4-160.el9_0.x86_64
ruby-default-gems-3.0.4-160.el9_0.noarch
ruby-libs-3.0.4-160.el9_0.x86_64
rubygem-bigdecimal-3.0.0-160.el9_0.x86_64
rubygem-bundler-2.2.33-160.el9_0.noarch
rubygem-io-console-0.5.7-160.el9_0.x86_64
rubygem-json-2.5.1-160.el9_0.x86_64
rubygem-psych-3.3.2-160.el9_0.x86_64
rubygem-rdoc-6.3.3-160.el9_0.noarch
rubygems-3.2.33-160.el9_0.noarch
Complete!
+ cd /usr/src/
+ curl https://aws-codedeploy-us-east-1.s3.us-east-1.amazonaws.com/latest/install -o install
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 19045 100 19045 0 0 133k 0 --:--:-- --:--:-- --:--:-- 133k
+ chmod +x ./install
+ ./install auto
+ systemctl status codedeploy-agent
● codedeploy-agent.service - AWS CodeDeploy Host Agent
Loaded: loaded (/usr/lib/systemd/system/codedeploy-agent.service; enabled; preset: disabled)
Active: active (running) since Wed 2024-03-20 08:37:35 UTC; 2s ago
Main PID: 11623 (ruby)
Tasks: 3 (limit: 4180)
Memory: 62.2M
CPU: 1.425s
CGroup: /system.slice/codedeploy-agent.service
├─11623 "codedeploy-agent: master 11623"
└─11633 "codedeploy-agent: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller of master 11623"
Mar 20 08:37:35 ip-10-10-0-24.ec2.internal systemd[1]: Starting AWS CodeDeploy Host Agent...
Mar 20 08:37:35 ip-10-10-0-24.ec2.internal systemd[1]: Started AWS CodeDeploy Host Agent.
+ cat /opt/codedeploy-agent/.version
agent_version: OFFICIAL_1.7.0-92_rpm+ systemctl enable amazon-ssm-agent --now
+ systemctl enable httpd --now
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
デプロイ後にALBのDNS名を使ってアクセスしてみます。
$ curl non-97-sandbox-alb-540065044.us-east-1.elb.amazonaws.com -I
HTTP/1.1 403 Forbidden
Date: Wed, 20 Mar 2024 08:44:55 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 5909
Connection: close
Server: Apache/2.4.57 (Red Hat Enterprise Linux)
Last-Modified: Mon, 09 Aug 2021 11:43:42 GMT
ETag: "1715-5c91ee59c9780"
Accept-Ranges: bytes
ドキュメントルート直下にはindex.htmlも何もないので、403となりました。
CodeDeployを使ったコンテンツ配布
それではCodeDeployを使ってコンテンツを配布します。
既にアプリケーションはCDKで作成しています。手動でデプロイを作成します。
リビジョンの場所にCodeDeployのサンプルアプリケーションであるs3://aws-codedeploy-us-east-1/samples/latest/SampleApp_Linux.zip
を入力してデプロイの作成をクリックします。
デプロイが開始されました。デプロイ設定をOne At A Timeにしたので1台づつデプロイされていそうです。
しばらくすると1台目のEC2インスタンスへのデプロイが完了しました。
もう一台のEC2インスタンスへのデプロイも開始していそうです。
そのまま4分ほど待つと、デプロイステータスが成功になりました。
ALBのターゲットグループを確認すると、どちらもHealthyになっています。
アクセスすると、確かにHTTPステータスコード200が返ってくるようになりました。
$ curl non-97-sandbox-alb-540065044.us-east-1.elb.amazonaws.com -I
HTTP/1.1 200 OK
Date: Wed, 20 Mar 2024 09:25:15 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 717
Connection: close
Server: Apache/2.4.57 (Red Hat Enterprise Linux)
Last-Modified: Wed, 20 Mar 2024 09:22:43 GMT
ETag: "2cd-61414220b6098"
Accept-Ranges: bytes
CodeDeploy Agentが出力されたログを確認してみます。
$ cat /opt/codedeploy-agent/deployment-root/deployment-logs/codedeploy-agent-deployments.log
# Logfile created on 2024-03-20 09:22:44 +0000 by logger.rb/v1.4.3
[2024-03-20 09:22:44.321] [d-XWH2NUY35]LifecycleEvent - BeforeInstall
[2024-03-20 09:22:44.322] [d-XWH2NUY35]Script - scripts/install_dependencies
[2024-03-20 09:22:45.303] [d-XWH2NUY35][stdout]Updating Subscription Management repositories.
[2024-03-20 09:22:45.303] [d-XWH2NUY35][stdout]Unable to read consumer identity
[2024-03-20 09:22:45.307] [d-XWH2NUY35][stdout]
[2024-03-20 09:22:45.307] [d-XWH2NUY35][stdout]This system is not registered with an entitlement server. You can use subscription-manager to register.
[2024-03-20 09:22:45.307] [d-XWH2NUY35][stdout]
[2024-03-20 09:22:45.551] [d-XWH2NUY35][stdout]Red Hat Enterprise Linux 9 for x86_64 - AppStre 62 kB/s | 4.5 kB 00:00
[2024-03-20 09:22:45.813] [d-XWH2NUY35][stdout]Red Hat Enterprise Linux 9 for x86_64 - BaseOS 79 kB/s | 4.1 kB 00:00
[2024-03-20 09:22:46.029] [d-XWH2NUY35][stdout]Red Hat Enterprise Linux 9 Client Configuration 31 kB/s | 1.5 kB 00:00
[2024-03-20 09:22:46.176] [d-XWH2NUY35][stdout]Package httpd-2.4.57-5.el9.x86_64 is already installed.
[2024-03-20 09:22:46.232] [d-XWH2NUY35][stdout]Dependencies resolved.
[2024-03-20 09:22:46.234] [d-XWH2NUY35][stdout]Nothing to do.
[2024-03-20 09:22:46.234] [d-XWH2NUY35][stdout]Complete!
[2024-03-20 09:22:46.378] [d-XWH2NUY35]Script - scripts/start_server
[2024-03-20 09:22:46.426] [d-XWH2NUY35][stderr]Redirecting to /bin/systemctl start httpd.service
問題なく動作していそうですね。
Auto ScalingしたEC2インスタンスに対してコンテンツ配布することを確認
せっかくなので、Auto ScalingしたEC2インスタンスに対してコンテンツ配布することを確認します。
Auto Scaling Group内のEC2インスタンスを停止させます。
すると、新しくEC2インスタンスが立ち上がってきました。
Auto Scalingのアクティビティにも記録されていました。
デプロイ履歴を確認すると、Auto Scaling Groupによって起動したEC2インスタンスに新たにデプロイが走っていそうです。
3分ほど待つとデプロイが完了しました。問題なく動作していますね。
CodeDeployを使いたいからという理由でRHEL 9の採用を諦めなくても良くなった
CodeDeploy Agent が Red Hat Enterprise Linux 9をサポートしたアップデートを紹介しました。
CodeDeployを使いたいからという理由でRHEL 9の採用を諦めなくても良くなりましたね。安心してRHEL 9を使えそうです。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!